/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package responsabile;

import ejb.GestioneCompetenzeLocal;
import ejb.GestioneCorsiLocal;
import ejb.GestioneSediLocal;
import ejb.GestoreTutorLocal;
import it.uninsieme.common.Utility;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;
import jpa.Competenza;
import jpa.Corsi;
import jpa.CredenzialiTutor;
import jpa.Sede;
import jpa.Tutor;

/**
 *
 * @author Administrator
 */
@ManagedBean(name = "TutorBean")
@ViewScoped

public class TutorBean {

    @EJB
    GestoreTutorLocal gtutor;
    @EJB
    GestioneSediLocal gsedi;
    @EJB
    GestioneCorsiLocal gcorsi;
    @EJB
    GestioneCompetenzeLocal gcompetenze;

    private String idTutor;
    private String citta;
    private String via;
    private String cap;
    private String telefono;
    private String provincia;
    private String cognome;
    private String codiceFiscale;
    private String email;
    private String cel;
    private String nome;
    private String username;
    private String password;
    private String confermaPassword;
    private String message;
    private String message2;
    private String competenza;
    private String sede;
    private String corso;
    private List<SelectItem> listaSedi;
    private List<SelectItem> listaCorsi;
    private List<SelectItem> listaCompetenze;
    private List<SelectItem> listaTutor;
    private List<Corsi> corsi;
    private List<Sede> sedi;
    private List<Competenza> competenze;
    private List<Tutor> tutor;
    private HashMap<Integer, Tutor> mappaTutor;

    public TutorBean() {
    }

    public String getMessage2() {
        return message2;
    }

    public void setMessage2(String message2) {
        this.message2 = message2;
    }

    public String getIdTutor() {
        return idTutor;
    }

    public void setIdTutor(String idTutor) {
        this.idTutor = idTutor;
    }

    public Tutor getTutor(Integer tutorID) {
        return gtutor.getTutor(tutorID);
    }

    public void setlistaTutor(List<SelectItem> listaTutor) {
        this.listaTutor = listaTutor;
    }

    public Collection<Tutor> getTutor() {
        return Collections.unmodifiableCollection(tutor);
    }

    public void setTutor(List<Tutor> tutor) {
        this.tutor = tutor;
    }

    public Collection<Competenza> getCompetenze() {
        return Collections.unmodifiableCollection(competenze);
    }

    public void setCompetenze(List<Competenza> competenze) {
        this.competenze = competenze;
    }

    public Collection<Corsi> getCorsi() {
        return Collections.unmodifiableCollection(corsi);
    }

    public void setCorsi(List<Corsi> corsi) {
        this.corsi = corsi;
    }

    public void setlistaCompetenze(List<SelectItem> listaCompetenze) {
        this.listaCompetenze = listaCompetenze;
    }

    public void setlistaCorsi(List<SelectItem> listaCorsi) {
        this.listaCorsi = listaCorsi;
    }

    public void setlistaSedi(List<SelectItem> listaSedi) {
        this.listaSedi = listaSedi;
    }

    public Collection<Sede> getSedi() {
        return Collections.unmodifiableCollection(sedi);
    }

    public void setSedi(List<Sede> sedi) {
        this.sedi = sedi;
    }

    public String getCompetenza() {
        return competenza;
    }

    public void setCompetenza(String competenza) {
        this.competenza = competenza;
    }

    public String getCorso() {
        return corso;
    }

    public void setCorso(String corso) {
        this.corso = corso;
    }

    public String getSede() {
        return sede;
    }

    public void setSede(String sede) {
        this.sede = sede;
    }

    public void setCap(String cap) {
        this.cap = cap;
    }

    public void setCel(String cel) {
        this.cel = cel;
    }

    public void setCitta(String citta) {
        this.citta = citta;
    }

    public void setCodiceFiscale(String codiceFiscale) {
        this.codiceFiscale = codiceFiscale;
    }

    public void setCognome(String cognome) {
        this.cognome = cognome;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public void setConfermaPassword(String confermaPassword) {
        this.confermaPassword = confermaPassword;
    }

    public String getConfermaPassword() {
        return confermaPassword;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public void setProvincia(String provincia) {
        this.provincia = provincia;
    }

    public void setTelefono(String telefono) {
        this.telefono = telefono;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public void setVia(String via) {
        this.via = via;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }

    public String getCap() {
        return cap;
    }

    public String getCel() {
        return cel;
    }

    public String getCitta() {
        return citta;
    }

    public String getCodiceFiscale() {
        return codiceFiscale;
    }

    public String getCognome() {
        return cognome;
    }

    public String getEmail() {
        return email;
    }

    public String getNome() {
        return nome;
    }

    public String getPassword() {
        return password;
    }

    public String getProvincia() {
        return provincia;
    }

    public String getTelefono() {
        return telefono;
    }

    public String getUsername() {
        return username;
    }

    public String getVia() {
        return via;
    }

    public Collection<SelectItem> getlistaSedi() {
        listaSedi = new ArrayList<>();
        sedi = gsedi.listaSedi();
        for (Sede p : sedi) {
            String text = p.getCitta() + " - via " + p.getVia();
            listaSedi.add(new SelectItem(p.getId(), text));
        }
        Utility.ordinaListaLabel(listaSedi);
        return Collections.unmodifiableCollection(listaSedi);
    }

    public Collection<SelectItem> getlistaTutor() {
        if (listaTutor == null) {
            listaTutor = new ArrayList<>();
        }
        if (mappaTutor == null) {
            mappaTutor = new HashMap<>();
        }
        if (listaTutor.isEmpty()) {
            tutor = gtutor.listaTutor();
            for (Tutor p : tutor) {
                String text = "ID:" + p.getId() + " - " + p.getCognome() + " " + p.getNome();
                listaTutor.add(new SelectItem(p.getId(), text));
                mappaTutor.put(p.getId(), p);
            }
            Utility.ordinaListaLabel(listaTutor);
        }
        if (listaTutor.size() > 0) {
            Integer indice;
            try {
                indice = Integer.valueOf(idTutor);
            } catch (NumberFormatException x) {
                indice = (Integer) listaTutor.get(0).getValue();
            }
            assegnaValoriLabel(mappaTutor.get(indice).getId());
        }
        return Collections.unmodifiableCollection(listaTutor);
    }

    public Collection<SelectItem> getlistaCompetenze() {
        listaCompetenze = new ArrayList<>();
        competenze = gcompetenze.listaCompetenze();
        for (Competenza p : competenze) {
            listaCompetenze.add(new SelectItem(p.getId(), p.getMateria()));
        }
        Utility.ordinaListaLabel(listaCompetenze);
        return Collections.unmodifiableCollection(listaCompetenze);
    }

    public Collection<SelectItem> getlistaCorsi() {
        listaCorsi = new ArrayList<>();
        corsi = gcorsi.listaCorsi();
        for (Corsi c : corsi) {
            listaCorsi.add(new SelectItem(c.getId(), c.getNome()));
        }
        Utility.ordinaListaLabel(listaCorsi);
        return Collections.unmodifiableCollection(listaCorsi);
    }

    public String registra() {
        CredenzialiTutor cu = new CredenzialiTutor();
        cu.setPassword(password);
        cu.setUsername(username);
        if (gtutor.controllaUsername(cu) != null) {
            message = "Username già utilizzata da un altro Tutor";
            return "errore";
        }
        if (!password.equals(confermaPassword)) {
            message = "Errore le password non coincidono";
            return "errore";
        } else {
            message = "";
        }
        Tutor t = new Tutor();
        t.setCap(cap);
        t.setCell(cel);
        t.setCitta(citta);
        t.setCodiceFiscale(codiceFiscale);
        t.setCognome(cognome);
        t.setEmail(email);
        t.setNome(nome);
        t.setProvincia(provincia);
        t.setTelefono(telefono);
        t.setVia(via);
        try {
            t.setCompetenzaid(new Integer(competenza));
        } catch (NumberFormatException nfe) {
            message = "Devi caricare prima una competenza";
            return "errore";
        }
        t.setSedeid(new Integer(sede));
        t.setCorsiid(new Integer(corso));
        boolean reg = gtutor.registra(cu, t);
        if (reg == false) {
            message = "Errore nella registrazione del tutor nel database";
            return "errore";
        }
        message2 = "Registrazione effettuata correttemente";
        return "RegistrazioneOK";
    }

    public String modifica() {
        Tutor t = new Tutor();
        t.setId(new Integer(idTutor));
        t.setCap(cap);
        t.setCell(cel);
        t.setCitta(citta);
        t.setCodiceFiscale(codiceFiscale);
        t.setCognome(cognome);
        t.setEmail(email);
        t.setNome(nome);
        t.setProvincia(provincia);
        t.setTelefono(telefono);
        t.setVia(via);
        try {
            t.setCompetenzaid(new Integer(competenza));
        } catch (NumberFormatException nfe) {
            message = "Devi caricare prima una competenza";
            return "errore";
        }
        try {
            t.setSedeid(new Integer(sede));
        } catch (NumberFormatException nfe) {
            message = "Devi caricare prima una sede";
            return "errore";
        }
        try {
            t.setCorsiid(new Integer(corso));
        } catch (NumberFormatException nfe) {
            message = "Devi caricare prima un corso";
            return "errore";
        }
        boolean reg = gtutor.modifica(t);
        if (reg == false) {
            message = "Errore nella modifica del tutor nel database";
            return "errore";
        }
        message2 = "Modifica effettuata correttemente";
        message = "Modifica effettuata correttemente";
        return "RegistrazioneOK";
    }

    public String elimina() {
        boolean reg = false; //fittizio
        try {
            reg = gtutor.elimina(new Integer(idTutor));
        } catch (NumberFormatException nfe) {
            message = "Non ci sono tutor da eliminare";
            return "errore";
        }
        if (reg == false) {
            message = "Errore nell'eliminazione del tutor dal database";
            return "errore";
        }
        listaTutor = null;
        mappaTutor = null;
        message2 = "Eliminazione effettuata correttemente";
        return "RegistrazioneOK";
    }

    private void assegnaValoriLabel(Object value) {
        if (value == null || !(value instanceof Integer)) {
            return;
        }
        Integer id = (Integer) value;
        valorizzaCampiTutor(mappaTutor.get(id));
    }

    public void assegnaValoriLabel(ValueChangeEvent event) {
        if (event == null) {
            return;
        }
        Object idTutorNew = event.getNewValue();
        if (idTutorNew instanceof String) {
            Integer id;
            try {
                id = Integer.parseInt((String) idTutorNew);
                idTutor = (String) idTutorNew;
            } catch (NumberFormatException e) {
                return;
            }
            valorizzaCampiTutor(mappaTutor.get(id));
        }
    }

    public void valorizzaCampiTutor(Tutor t) {
        setNome(t.getNome());
        setCognome(t.getCognome());
        setCodiceFiscale(t.getCodiceFiscale());
        setProvincia(t.getProvincia());
        setCitta(t.getCitta());
        setVia(t.getVia());
        setCap(t.getCap());
        setTelefono(t.getTelefono());
        setCel(t.getCell());
        setEmail(t.getEmail());
        setSede(t.getSedeid().toString());
        setCorso(t.getCorsiid().toString());
        setCompetenza(t.getCompetenzaid().toString());
    }

}
